# include <bits/stdc++.h>
# define mid ((l + r) >> 1)
# define MAXN 200023
# define INF 0x7fffffff
using namespace std;

inline char getc(){
    static char buf[1 << 18], *fs, *ft;
    return (fs == ft && (ft = (fs = buf) + fread(buf, 1, 1 << 18, stdin)), fs == ft) ? EOF : *fs++;
}

# define getc() getchar()

inline int gn() {
    register int k = 0, f = 1;
    register char c = getc();
    for(; !isdigit(c); c = getc()) if(c == '-') f = -1; 
    for(; isdigit(c); c = getc()) k = k * 10 + c - '0';
    return k * f;
}

int n, k, q;

struct node { 
    int lz, mi, sum;//sum is the times which bigger than k
    node *ls, *rs;
    node(){;}
}*root;

inline int get_sum(node *x) { 
    return max(x->sum, x->ls ? x->ls->sum : 0 + x->rs ? x->rs->sum : 0);
}

inline void pushdown(node *&x, int l, int r) { 
    if(x && x->lz) { 
        if(x->ls) { 
            x->ls->mi += x->lz;
            x->ls->lz += x->lz;
        }
        if(x->rs) { 
            x->rs->mi += x->lz;
            x->rs->lz += x->lz;
        }
        x->lz = 0;
        x->mi = min(x->ls ? x->ls->mi : 0, x->rs ? x->rs->mi : 0);
    }
}

node *build(int l, int r) { 
    node *x = new node();
    if(l ^ r) { 
        x->ls = build(l, mid);
        x->rs = build(mid + 1, r);
    }
    return x;
}

void add(node *x, int l, int r, int s, int t) { 
    pushdown(x, l, r);
    if(l == s && r == t) { 
        x->lz++;
        x->mi++;
    } else { 
        if(t <= mid) add(x->ls, l, mid, s, t);
        else if(s > mid) add(x->rs, mid + 1, r, s, t);
        else { 
            add(x->ls, l, mid, s, mid);
            add(x->rs, mid + 1, r, mid + 1, t);
        }
        x->mi = min(x->ls ? x->ls->mi : 0, x->rs ? x->rs->mi : 0);
    }
}

int find(node *x, int l, int r, int s, int t) { 
    pushdown(x, l, r);
    if(l == s && r == t) { 
        if(x->mi >= k) return r - l + 1;
        else if(l ^ r) return find(x->ls, l, mid, l, mid) + find(x->rs, mid + 1, r, mid + 1, r);
        else return 0;
    } else { 
        if(t <= mid) return find(x->ls, l, mid, s, t);
        else if(s > mid) return find(x->rs, mid + 1, r, s, t);
        else { 
            return find(x->ls, l, mid, s, mid) + find(x->rs, mid + 1, r, mid + 1, t);
        }
    }
}

int main() { 
    n = gn(), k = gn(), q = gn();
    root = build(1, MAXN);
    for(int i = 1; i <= n; i++) { 
        int l = gn(), r = gn();
        add(root, 1, MAXN, l, r);
    }
    for(int i = 1; i <= q; i++) { 
        int l = gn(), r = gn();
        printf("%d\n", find(root, 1, MAXN, l, r));
    }
    return 0;
}
